// 一、
// GO{
//   b:undefined
//   a:undefined->f a(){}
//   fn1:f fn1(){}
// }
function fn1(a, b) {
  // AO{
  //   b:undefined
  //   a:undefined->1->f a(){}
  // }
  console.log(a); //f a(){}
  console.log(b); //undefined
  var b = 234; //b(undefined)->234
  console.log(b); //234
  a = 123; //a(a(){})->123
  console.log(a); //123

  function a() {}
  var a;
  b = 234; //b(234)->234
  var b = function () {}; //b(234)->f(){}
  console.log(a); //123
  console.log(b); //f (){}
}
fn1(1);

// 二、
// GO{
//   a:undefined
//   b:undefined
//   c:undefined
//   fn2:f fn2(){}
//   e:f e(){}
//   f:undefined
// }
a = 100;
function fn2(e) {
  // AO{
  //   a:undefined
  //   b:undefined
  //   c:undefined
  //   e:f e(){}
  //   f:undefined
  // }
  function e() {}
  arguments[0] = 2; //e->2
  console.log(e); //2
  // a 为undefined不进入循环
  if (a) {
    var b = 123;
    console.log(b);
  }
  var c;
  a = 10; //a(undefined)->10
  var a;
  console.log(b); //undefined
  f = 123; //f(undefined)->123
  console.log(c); //undefined
  console.log(a); //10
}
// 48行 a(10)->100
var a;
fn2(1);
console.log(a); // 100
console.log(f); // 123

// 三、
// GO{
//   global:undefined
//   f3:f f3(){}
// }
global = 100;
function fn3(global) {
  // AO{
  //   gobal:undefined->100
  // }
  console.log(global); //100
  global = 200; //global(100)->200
  console.log(global); //200
  var global = 300; //global(200)->300
}
// 第84行 global(undefined)->100
fn3(global);
var global;

// 四、
// GO{
//   d:undefined
//   c:undefined->f c(){}
//   a:undefined->f a(){}
//   b:undefined
//   f4:f f4(){}
// }
function fn4(a) {
  // AO{
  //   d:undefined
  //   c:f c(){}
  //   a:f a(){}->5->f a(){}
  //   b:undefined
  // }
  var d;
  var c;
  b = 10; //b(undefied)->10
  var a;
  console.log(a); //f a(){}
  a = 123; //a(5)->123

  function a() {}
  console.log(a); //123
  var b;
  console.log(b); //10

  function c() {}
  console.log(c); //f c(){}
  console.log(d); //undefined
  d = 100; //d(undefined)->100
  console.log(d); //100
}
fn4(5);

// 五、
let obj = {
  a: 110,
  fn: function (a) {
    console.log(a);
    a = 10;
    console.log(a);
  },
};

obj.fn(obj.a);
//obj.a -> 110
//fn(110) ->110 10
// obj.fn(obj.a)  ->110 10

// 六、
// 1,1,2,3,5,8,13,.....
// 求第n项的和, 例子: 求第三项的和, 1 + 1 + 2
function fpnqSum(n) {
  if (n <= 0) {
    return 0;
  } else if (n === 1) {
    return 1;
  } else {
    return fpnqSum(n - 1) + fpnqSum(n - 2) + 1;
  }
}
console.log(fpnqSum(8));

// 七、
// 要求输入id 返回数据对象
// 例如: 输入id=111, 返回{id: 111,gname: '海尔冰箱'}
var data = [
  {
    id: 1,
    name: "家电",
    goods: [
      {
        id: 11,
        gname: "冰箱",
        goods: [
          {
            id: 111,
            gname: "海尔冰箱",
          },
          {
            id: 112,
            gname: "小天鹅冰箱",
          },
        ],
      },
      {
        id: 12,
        gname: "洗衣机",
      },
    ],
  },
  {
    id: 2,
    name: "服饰",
  },
];
let fingId = 111;
function findId(data, Id) {
  // 循环遍历数组里面的对象
  for (let i = 0; i < data.length; i++) {
    const item = data[i];
    //当前对象中找到就返回对象
    if (item.id === Id) {
      return item;
    }
    // 没找到则找该对象下有goods
    if (item.goods) {
      const find = findId(item.goods, Id);
      if (find) {
        return find;
      }
    }
  }
}
findId(data, fingId);